home *** CD-ROM | disk | FTP | other *** search
- /* LANGEXT.H */
-
- /* Fixup some C syntax I really don't like
- De gustibus non est desputandum
- (Concerning taste there is not argument -- or
- Only fools argue where taste is concerned) */
-
-
- /* Block basic C commands */
-
- #define If if (
- #define Then ) {
- #define Else } else {
- #define ElseIf } else if (
- #define EndIf }
-
- #define Using switch (
- #define BeginCase ) {
- #define When case
- #define Otherwise default
- #define EndCase }
-
- #define Loop while(1)
- #define BeginLoop {
- #define EndLoop }
- #define ExitLoop break
- #define ContinueLoop continue
- #define ExitIf(cond) if (cond) break
- #define LoopIf(cond) if (cond) continue
-
- #define While while (
- #define BeginWhile ) {
- #define EndWhile }
-
- #define Repeat do
- #define BeginRepeat {
- #define RepeatIf } while ((
- #define Until } while (!(
- #define EndRepeat ))
-
- #define For for (
- #define BeginFor ) {
- #define EndFor }
-
- #define BeginDeclarations {
- #define EndDeclarations
- #define BeginCode
- #define EndCode }
-
- #define Type typedef
-
- #define Structure struct
- #define BeginStructure {
- #define EndStructure }
-
- #define Union union
- #define BeginUnion {
- #define EndUnion }
-
- #define Enumeration enum
- #define BeginEnumeration {
- #define EndEnumeration }
-
- /* Extended C commands */
-
- /* Linked List commands */
-
- #define ListTypeOf(exp) \
- Structure exp##_list_struct \
- BeginStructure \
- exp##_ptr first; \
- exp##_ptr last; \
- EndStructure; \
- Type Structure exp##_list_struct exp##_list
-
- Structure Generic_Element_struct
- BeginStructure
- Structure Generic_Element_struct far *next;
- EndStructure;
-
- Type Structure Generic_Element_struct Generic_Element_type;
- Type Generic_Element_type far *Generic_Element_ptr;
-
- ListTypeOf(Generic_Element);
-
- #define TraverseList(lst,elm) for(elm=lst.first; elm IsNotNull; Next(elm))
- #define BeginTraverse {
- #define EndTraverse }
-
- #define Insert ListInsert((Generic_Element_ptr)
- #define After ,0,(Generic_Element_ptr)
- #define AtEnd ,1,Null
- #define AtBeginning ,2,Null
- #define InList ,(Generic_Element_list far *) &(
- #define EndInsert ))
-
- #define Delete ListDelete((Generic_Element_ptr)
- #define FromList ,(Generic_Element_list far *) &(
- #define EndDelete ))
-
- #define Push ListInsert((Generic_Element_ptr)
- #define OnTo ,2,Null,(Generic_Element_list far *) &(
- #define EndPush ))
-
- #define Pop ListPop((Generic_Element_list far *) &(
- #define InTo ),(Generic_Element_ptr *) &(
- #define EndPop ))
-
- #define LastInList(ptr) ((*ptr).next == NULL)
- #define Next(ptr) ptr = (*ptr).next
- #define First(list) list.first
- #define Last(list) list.last
-
- /* Make operations less cryptic */
-
- /* Logical operators */
- #define AndIf &&
- #define OrIf ||
- #define Not !
- #define Is ==
- #define IsNot !=
- #define IsEqualTo ==
- #define Equals ==
- #define IsNotEqualTo !=
- #define LessThan <
- #define NotLessThan >=
- #define LessThanOrEqualTo <=
- #define GreaterThan >
- #define Exceeds >
- #define Positive > 0
- #define Negative < 0
- #define IsZero == 0
- #define IsNull == 0
- #define IsNotNull != 0
- #define IsEmpty == 0
- #define IsNotEmpty != 0
- #define IsNotZero != 0
- #define IsTrue != 0
- #define IsFalse == 0
- #define NotGreaterThan <=
- #define GreaterThanOrEqualTo >=
- #define IsIdentifier(x) (((x>='A') && (x<='Z')) || \
- ((x>='a') && (x<='z')) || \
- (x=='_'))
- #define IsNumber(x) ((x>='0') && (x<='9'))
-
- /* Bitwise operators */
- #define And &
- #define Or |
- #define Xor ^
- #define Complement ~
- /* Some other operators */
- #define Addr(exp) &(exp)
- #define Mod %
- #define ShiftedLeft <<
- #define ShiftedRight >>
-
- /* Some useful constants */
-
- #define False 0
- #define Null 0
- #define True 1
-
- /* Some helpful types */
- Type unsigned char bit_8;
- Type unsigned int bit_16;
- Type unsigned long bit_32;
- Type unsigned char byte;
- Type byte far *byte_ptr;
- Type void far *far_ptr;
- Type signed char int_8;
- Type signed int int_16;
- Type signed long int_32;
- Type void near *near_ptr;
- Type char near *char_ptr;
-
- Structure string_struct
- BeginStructure
- bit_16 max_length;
- bit_16 length;
- byte text[1];
- EndStructure;
-
- Type Structure string_struct string_type;
- Type string_type far *string_ptr;
-
- #define String(str) ((byte_ptr) ((*str).text))
- #define Length(str) (*str).length
- #define MaxLength(str) (*str).max_length
- #define FirstCharIn(str) *String(str)
- #define LastCharIn(str) String(str)[Length(str)-1]
-
- /* Some helpful type casts */
-
- #define Bit_8(exp) ((bit_8) (exp))
- #define Bit_16(exp) ((bit_16) (exp))
- #define Bit_32(exp) ((bit_32) (exp))
- #define Int_8(exp) ((int_8) (exp))
- #define Int_16(exp) ((int_16) (exp))
- #define Int_32(exp) ((int_32) (exp))
- #define CharPtr(exp) ((char *) (exp))
- #define Byte(exp) ((byte) (exp))
- #define BytePtr(exp) ((byte_ptr ) (exp))
- #define NearPtr(exp) ((near_ptr) (exp))
- #define FarPtr(exp) ((far_ptr) (exp))
- #define StringPtr(exp) ((string_ptr) (exp))
- #define Offset(exp) ((bit_16) (exp))
- #define Segment(exp) ((bit_16) (((bit_32) (exp)) >> 16L))
- #define Low(exp) ((bit_16) (exp))
- #define High(exp) ((bit_16) (((bit_32) (exp)) >> 16L))
- #define MakeFarPtr(seg,off) ((far_ptr) ((((bit_32) (seg)) << 16L)|(off)))
-